package persistencia;

import java.util.List;

import busqueda.criterio.CriterioCompuesto;

public abstract class IntermediarioPersistencia {
	protected String entidad;
	public IntermediarioPersistencia(String entidad){
		this.entidad = entidad;
	}
	public Object buscar(CriterioCompuesto criterio) {
		Cache cache = Cache.getInstance();
		List<Object> result = materializar(criterio);
		for(Object item : result) {
			if( item instanceof ObjectoPersistente && item != null) {
				cache.depositar((ObjectoPersistente) item);
			}
		}
		return result;
	}
	public Object buscarPorId(Long valor) {
		Cache cache = Cache.getInstance();
		ObjectoPersistente resultadoCache = cache.buscar(valor);
		if( resultadoCache != null ) {
			return resultadoCache;
		} else {
			ObjectoPersistente objetoMaterializado = materializar(valor);
			cache.depositar(objetoMaterializado);
			return objetoMaterializado;
		}
	}
	
	public abstract List<Object> materializar(CriterioCompuesto criterio);
	public abstract ObjectoPersistente materializar(Long valor);
	
}
